Estoy tratando de probar mi aplicación usando pruebas en laravel. Pero tengo un error, cada vez que ejecuto la prueba usando la prueba artesanal de php, siempre dice Unable to locate factory for [App\Models\User] . No puedo entender por qué sucede esto.
aquí está mi código de prueba:
<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; class Fish extends TestCase { /** @test */ public function test_authenticated_users_can_access_home() { $user = factory(User::class)->create(); $this->actingAs($user); $response = $this->get('/home')->assertOk(); } }y este es mi modelo:
<?php namespace App\Models; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use HasFactory, Notifiable; ...fábrica de usuarios
<?php namespace Database\Factories; use App\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Support\Str; class UserFactory extends Factory { /** * The name of the factory's corresponding model. * * @var string */ protected $model = User::class; /** * Define the model's default state. * * @return array */ public function definition() { return [ 'name' => $this->faker->name(), 'email' => $this->faker->unique()->safeEmail(), 'email_verified_at' => now(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 'remember_token' => Str::random(10), ]; } ... }cualquier ayuda sería muy apreciada, gracias lo siento por mi mal inglés
De su clase UserFactory, asumo que está usando Laravel 8.
La nueva forma de llamar a las fábricas en Laravel 8 es
$user = User::factory()->create();en lugar de la vieja manera
$user = factory(User::class)->create(); Creo que mezclaste la sintaxis de Laravel 8 y 7 en tu ProjectFactory. Recomendaría eliminar su ProjectFactory y volver a crearlo en Laravel 8 con el comando artesanal de PHP: php artisan make:factory ProjectFactory . Entonces llamarías a la fábrica así:
$project = Project::factory()->create();Asegúrese de que su modelo de Proyecto use hasFactory; rasgo para que esto funcione.